iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Software Development

Datomic,內建事件溯源的資料庫。系列 第 5

Datomic 所屬的資料庫類別

  • 分享至 

  • xImage
  •  

多年前,有一本 Martin Fowler 寫的書,NoSQL Distilled,它將 NoSQL 資料分成四大類別:

  1. 鍵值資料庫
  2. 文件資料庫
  3. 欄式資料庫
  4. 圖學資料庫

也許是因為這本書對業界的影響,當我談論 Datomic 資料庫時,常常遇到友人在第一時間詢問我,Datomic 是哪一類別的資料庫?我想,友人期待的答案應該是某個類別,這樣子就可以快速地對 Datomic 產生大概的認知。

然而,我的答案是:「它自成一類,而合理的類別應該稱之為 Clojure-Datalog 資料庫。」

會有這個答案有兩個原因:

  1. 在 Datomic 出現之後,由於它的設計概念很有創新性,已經有其它五個資料庫算是模仿學習 Datomic 而設計的。因為已經不是只有一個了,而是好幾個,可以算是成為一個類別了。(註1)
  • DataScript
  • Datalevin
  • Datahike
  • Asami
  • XTDB
  1. 既然我認為它是一個新類別,那該叫它什麼名字比較好呢?這部分的思考是命名學的問題。以資料庫來講,容易被使用者理解的資料庫類別命名方式是用資料庫的查詢語言來命名,所以稱之為 Clojure-Datalog 資料庫也相當合理。

Clojure 語言

讀者看到了資料庫的類別名稱之後,心裡可能覺得,「咦,Clojure?這不是程式語言嗎?這跟 Datomic 有關嗎?」

Datomic 是用 Clojure 語言開發的資料庫,但是,Datomic 與 Clojure 的關系非比尋常,下圖是個類比來說明它們的緊密關系。

the relationships between Clojure and Datomic

Clojure 語言和 Datomic 資料庫的發明者是 Rich Hickey ,而 Rich Hickey 對於程式設計有他獨樹一格的思想:

  1. 在介面層次:他喜歡彈性與表現能力。所以在程式語言,他選擇了 Lisp 語法;在資料庫,他選擇了 Datalog 查詢語言。

  2. 在確保系統簡單、容易理解、容易除錯方面:他認為函數式編程 (functional programming) 至關重要。所以在程式語言,他實作了不可變動的容器 (immutable collection) ;在資料庫,他實作了事件溯源 (event sourcing)。

  3. 最後,為了讓創新可以被商業化使用:他貫徹「不要重造輪子,接軌既有的生態系」的哲學。所以在程式語言,他讓程式語言寄生在 JVM 生態系中,Clojure 語言可以編繹成為 Java byte code ,並且與 JVM 做到良好的交互;在資料庫,他讓 Datomic 可以使用許多不同種類的鍵值儲存 (key-value store) 來做資料儲存層 (storage layer)。(註2)

註:

  1. 參考 http://clojurelog.github.io
  2. Datomic 支援的資料儲存層有:DynamoDB, Infinispan, Riak, Couchbase,還有許多的 SQL 資料庫。

其它資源:

  1. 歡迎訂閱PruningSuccess電子報,主要談論軟體開發、資料處理、資料分析等議題。
  2. 歡迎加入Clojure社群

上一篇
一些 SQL 資料庫共同的缺陷 - 續
下一篇
先從 Datalog 談起 -- part 1 (edn)
系列文
Datomic,內建事件溯源的資料庫。25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言